const ws = require('nodejs-websocket')

//负责登陆服务器消息管理的模块
class LoginMessageMgr{
    constructor() {
    }
    static getInstance() {
        if(!LoginMessageMgr.instance){
            LoginMessageMgr.instance = new LoginMessageMgr();
            return LoginMessageMgr.instance;
        }else{
            return LoginMessageMgr.instance;
        }
    }
    //创建服务并监听  port-> 端口号
    createServer(port){
        let websocket =  ws.createServer((client)=>{
            client.on('text',(result)=>{
                console.log('客户端发来了消息:',result);
                let message = JSON.parse(result);
                let type = message.type;
                let data = message.data;
                this.recvMessaage(type,data,client);
                console.log('登陆服务器接收到消息；消息类型->',type,'，数据为->',data);
                //client.send("你好啊客户端")
            })
            client.on('error',(err)=>{
                console.log('连接出现错误',err)
            })
            client.on('close',()=>{
                console.log('连接断开');
            })
        })
        websocket.listen(port);
        console.log('登陆服务器启动，端口号为：',port);
    }
    //接收客户端消息并处理 type--消息类型  data--传递的数据  client--某个客户端
    recvMessaage(type,data,client){
        switch(type){
            case 'login':
                console.log('客户端发来login消息')
                this.responseUserLoginMessage(data.id).then((result)=>{
                    this.sendMessage(type,result[0],client);
                }).catch((err)=>{
                    this.sendMessage(type, {err:'未获取数据'},client);
                })
                break;
            default:
                break;
        }
    }
    //发送给客户端消息 type--消息类型  data--传递的数据  client--某个客户端
    sendMessage(type,data,client){
        let result = {
            type:type,
            data:data,
        }
        client.send(JSON.stringify(result));
    }
    //响应客户端发送登陆请求的函数
    responseUserLoginMessage(id){
        return new Promise((resolve, reject) => {
            global.loginServerMgr.loginDbMgr.getUserInfo(id).then( result=>{
                console.log('从数据库取回的结果是：',result);
                resolve(result);
            }).catch(err =>{
                console.log('从数据库获取数据失败，失败原因：',err);
                reject(err);
            })
        })
    }
}

module.exports = LoginMessageMgr.getInstance();